/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.ec.socialfun.controladores;

import com.ec.socialfun.datamanager.ComunDataManager;
import com.ec.socialfun.entidades.EventosInteres;
import com.ec.socialfun.entidades.Pais;
import com.ec.socialfun.entidades.Usuario;
import com.ec.socialfun.enumeradores.RedesSocialesEnum;
import com.ec.socialfun.excepciones.AlmacenarResultadoEventoIntException;
import com.ec.socialfun.excepciones.ParametroException;
import com.ec.socialfun.excepciones.RecuperaEventoInteresException;
import com.ec.socialfun.servicios.EventosInteresFacade;
import com.ec.socialfun.servicios.ParametrosFacade;
import com.ec.socialfun.servicios.RedesSocialesFacade;
import com.ec.socialfun.servicios.ResultadoEventoInteresFacade;
import com.ec.socialfun.servicios.UsuarioFacade;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.RequestScoped;
import javax.faces.component.UIForm;
import javax.faces.model.SelectItem;
import org.jboss.logging.Logger;

/**
 *
 * @author jorge
 */
@ManagedBean
@RequestScoped
public class ComunControlador extends PadreControlador {

    private static final Logger LOG = Logger.getLogger(ComunControlador.class.getName());
    @EJB
    private UsuarioFacade usuarioFacade;
    @EJB
    private EventosInteresFacade eventosInteresFacade;
    @EJB
    private ResultadoEventoInteresFacade resultadoEventoInteresFacade;
    @EJB
    private RedesSocialesFacade redesSocialesFacade;
    @EJB
    private ParametrosFacade parametrosFacade;
    private UIForm formulario;
    @ManagedProperty(value = "#{comunDataManager}")
    private ComunDataManager comunDataManager;
    private final String SEPARADOR_OPCIONES = ",";
    private final String SEPARADOR_COD_TEXTO = ":";

    /**
     * Creates a new instance of ComunControlador
     */
    public ComunControlador() {
    }

    @Override
    public void iniciarDatos() {
        LOG.info(" inciar datos ComunControlador");
        Usuario usuario = usuarioFacade.recuperaUsuarioPorMail(this.obtenerUsuarioLogeado());
        getComunDataManager().setUsuario(usuario);
        String count =  usuarioFacade.contadorUsuarios().toString();
        getComunDataManager().setContador(count);
        getComunDataManager().setRedesSocialesUno(redesSocialesFacade.recuperarPorClave(RedesSocialesEnum.REDES_SOCIAL_UNO.getCodigo()));
        getComunDataManager().setRedesSocialesDos(redesSocialesFacade.recuperarPorClave(RedesSocialesEnum.REDES_SOCIAL_DOS.getCodigo()));
        try {
            getComunDataManager().setParametros(parametrosFacade.recuperaPorNombre("MAIL_COMENT"));
        } catch (ParametroException ex) {
            java.util.logging.Logger.getLogger(ComunControlador.class.getName()).log(Level.SEVERE, null, ex);
        }
        try {
            getComunDataManager().setMostrarEventoInteres(true);
            getComunDataManager().setResultadoEventoInteres(null);
            getComunDataManager().setEventoInteres(eventosInteresFacade.recuperaEventoInteresVigente());
            if (resultadoEventoInteresFacade.existeResultadoEventoInteresPorUsuarioYEvento(usuario, getComunDataManager().getEventoInteres())) {
                String resultado = resultadoEventoInteresFacade.recuperaResultadoEventoInteresPorUsuarioYEvento(usuario, getComunDataManager().getEventoInteres()).getReEvInResultado();
                getComunDataManager().setResultadoEventoInteres(resultado);

            }
        } catch (RecuperaEventoInteresException ex) {
            getComunDataManager().setEventoInteres(null);
            getComunDataManager().setMostrarEventoInteres(false);


        }
    }

    public List<SelectItem> getSelectItemResultadoEventoInteres() {
        List<SelectItem> lista = new ArrayList<SelectItem>();
        try {
            String opciones = eventosInteresFacade.recuperaEventoInteresVigente().getEvInOpciones();
            String[] arregloOpciones = opciones.split(SEPARADOR_OPCIONES);

            for (int i = 0; i < arregloOpciones.length; i++) {
                String[] opt = arregloOpciones[i].split(SEPARADOR_COD_TEXTO);
                lista.add(new SelectItem(opt[0], opt[1]));
            }

        } catch (RecuperaEventoInteresException ex) {
            LOG.error("Error al obtener evento interes vigente");
        }

        return lista;
    }

    public void enviarResultadoEventoInteres() {
        try {
            EventosInteres eventosInteres = getComunDataManager().getEventoInteres();
            eventosInteres.setResultadoEventoInteres(getComunDataManager().getResultadoEventoInteres());
            resultadoEventoInteresFacade.almacenarResultadoEventoInteres(this.obtenerUsuarioLogeado(), eventosInteres);
            iniciarDatos();
        } catch (AlmacenarResultadoEventoIntException ex) {
            LOG.error("Error al AlmacenarResultadoEventoIntException " + ex);
            this.mensajeError(ex.getMessage());
        }

    }

    public UIForm getFormulario() {
        iniciarDatos();
        return formulario;
    }

    public void setFormulario(UIForm formulario) {
        this.formulario = formulario;
    }

    public ComunDataManager getComunDataManager() {
        return comunDataManager;
    }

    public void setComunDataManager(ComunDataManager comunDataManager) {
        this.comunDataManager = comunDataManager;
    }

    @Override
    public List<SelectItem> getSelectItemPais() {
        List<SelectItem> lista = new ArrayList<SelectItem>();
        List<Pais> listaPais = paisFacade.findAll();
        for (Pais paisTmp : listaPais) {
            lista.add(new SelectItem(paisTmp, paisTmp.getPaNombre()));
        }
        return lista;
    }
    

    /**
     * direcciona a la pagina enviada como clave (key) y ademas elimina manage
     * bean de sesion
     *
     * @param key
     * @return
     */
    public String direccionar(String key) {
        limpiarDataManager();
        return new StringBuilder().append(key).append("?faces-redirect=true").toString();
    }
}
